Anthropic官方Claude Code教程:终于有人把Agent编程讲明白了
Anthropic官方Claude Code教程:终于有人把Agent编程讲明白了
来源:htmlDecode("荣姐聊AI")
原文链接:https://mp.weixin.qq.com/s/w8YE5KN2sJO2el-N5hcRNA
想学习Claude Code,网上资料那么多,怎么选?
还是官方的最靠谱。视频时间没那么长,荣姐利用这几天的业余时间好好学习了下。
视频地址: youtube.com/playlist?list=PLmWCw1CzcFilebjK89WLb5cAvM8K0cLB3
本文为9个视频的翻译版本,如有精力,可以翻看原视频。
1 什么是 Claude Code
1.1 什么是 Claude Code?
Claude Code 是一款代理式 (agentic) 编程工具,它能够理解你的代码库、编辑文件、运行命令,并与你现有的开发者工具无缝集成,帮助你更快地完成工作。目前,你可以在终端、Visual Studio Code、Claude 桌面应用、Web 网页端以及 JetBrains 系列 IDE 中使用它(不过在本视频中,我们将主要演示在终端中的使用体验)。
1.2 与 Claude AI 的核心区别
如果你以前用过 Claude AI(网页版聊天界面),你可能会好奇这两者有什么区别。
1.2.1 直接访问权限
与 Claude AI 不同,Claude Code 可以直接访问您的文件、终端和整个代码库。因此,它不需要来回复制和粘贴代码,而是可以直接深入其中并自行完成所有工作。
1.2.2 AI 代理模式 (AI Agent)
Claude Code 作为一个 AI 代理(AI Agent)工作。AI 代理是一种可以与其环境交互并执行操作以完成既定目标的软件。最基本的方法是让大型语言模型(LLM)处于实时的循环中。AI 代理可以访问工具、外部服务或其他 AI 代理,以帮助其达到预定义的目标。
1.3 Claude Code 的功能示例
这在实际应用中到底是什么样的呢?这里有几个具体的例子:
阅读与理解代码库:它可以阅读并深入理解你的整个项目。你可以让 Claude Code 解释某个复杂的功能,或者在成百上千行代码中追踪某个潜藏的 Bug。
执行与决策:Claude Code 可以自动执行你的构建脚本、运行测试用例、安装所需的依赖包,并能根据终端输出的成功或报错信息,智能决定下一步该做什么。
联网搜索能力:如果它在编码时需要查阅最新的 API 参考手册或官方文档,它可以直接自己去网上搜索并获取所需信息。
1.4 高效使用的核心概念
为了更好地驾驭 Claude Code,掌握以下三个概念非常重要:
上下文窗口(Context Window) :将其视为 Claude 的工作记忆。它可以容纳很多内容,但不能一次容纳所有内容;这就是其代理特性的体现,通过战略性方法在代码库中寻找答案,而无需将整个代码库存储到上下文中。
默认请求许可 :在运行命令或对代码库进行更改之前,Claude Code 会征求您的同意,您始终掌握控制权。
容错预期: 它可能会犯错,像任何工具一样,它并不完美,可能会误解您的意图、引入新的 Bug 或过度设计解决方案。
1.5 章节小结
简单回顾一下:Claude Code 是一款代理式编程工具。它能阅读你的代码库、编辑文件、运行命令并连接外部工具,以帮助你成倍提升开发效率。你今天就可以在你的终端、VS Code、JetBrains IDE 以及 Claude 桌面应用中下载并体验它。
2 安装 Claude Code
无论您想在终端、Web 还是 IDE 中使用,Claude Code 的安装都很简单。
2.1 终端安装方法
2.1.1 macOS / Linux / WSL
使用配套的 curl 命令即可一键安装。
curl -fsSL https://claude.ai/install.sh | bash
如果您偏好使用 Homebrew ,也可以使用 brew install 安装,但请注意这不具备自动更新功能。
brew install --cask claude-code
2.1.2 Windows
在 PowerShell 中使用 invoke-restmethod 命令;
irm https://claude.ai/install.ps1 | iex
在 cmd 中使用 curl 命令。
curl -fsSL https://claude.ai/install.cmd -o install.cmd && install.cmd && del install.cmd
你也可以选择使用 winget 命令安装,但与 Homebrew 一样,它同样不具备自动更新功能。
winget install Anthropic.ClaudeCode
2.2 初始设置与运行
2.2.1 启动
进入你的项目目录并运行 claude 命令。
2.2.2 初始设置
你将需要完成一些初始的引导设置:选择你的颜色主题,并登录你的 Claude 账户(支持 Pro、Max 或企业版账户),或者使用 API 密钥。如果你的组织拥有 Claude 企业账户,请务必选择该选项。
2.2.3 访问权限
无论你决定在哪个目录中运行 Claude,它都将拥有该目录及其所有子文件夹的访问权限。
2.3 IDE集成
2.3.1 Visual Studio Code (VS Code)
打开扩展面板,搜索 “Claude Code”。找到由 Anthropic 开发的扩展程序(确保它带有蓝色官方认证图标),点击安装。安装完成后,可能需要重启 VS Code。随后按 Ctrl+Shift+P (Mac 为 Cmd+Shift+P )打开命令面板,搜索 “Claude Code” 以在新标签页中打开它。当你打开文件时,如果看到了 Claude 的图标,也可以直接点击它。另外,你也可以在设置文件中选择关闭 UI 界面,直接使用纯终端体验。
2.3.2 JetBrains IDE
前往 JetBrains 插件市场安装 Claude Code 插件。安装并重启 IDE 后,你会看到 Claude 图标。点击图标会打开一个面板,你可以在其中看到终端界面,它将在你的开发过程中协助你。
2.3.3 Claude 桌面应用
在安装 Claude 桌面应用并登录后,你同样可以运行 Claude Code。你会看到顶部有一个标有 “Code” 的切换开关。它的界面外观与 Claude 聊天的界面相似,但允许你在特定文件夹中工作、更改权限,甚至在云端环境中操作。
2.3.4 Web 端
访问 claude.ai/code 使用,这与桌面应用非常相似,但目前仅限于 GitHub 存储库。
2.4 应该选择哪种方式?
2.4.1 终端:获取最新功能
如果你想始终保持最新状态,终端是最好的选择。绝大多数的新功能都会最先在终端发布。此外,IDE 插件的体验与终端极其相似。
2.4.2 桌面版:深度集成
如果你希望代码助手与你最喜欢的代码编辑器结合得更紧密,桌面版是一个极佳的选择。它可以让 Claude 在你处理其他任务时在后台静默运行。
2.4.3 Web 网页端:远程与并行工作
如果你想通过 GitHub 仓库远程处理项目,或者需要让多个会话同时并行工作,Web 网页端是一个非常棒的选择。
2.5 总结
总之,无论你想如何使用 Claude Code,一切都完全由你自己决定。
3 Claude Code 的工作原理
我们知道 Claude Code 与普通的聊天应用不同,但它到底是如何运作的呢?
3.1 代理循环 (The Agentic Loop)
Claude Code 的运作通过代理循环(Agentic Loop)解释是最好的 。
1. 您向 Claude Code 输入一个提示词。 2. Claude Code 随后会收集完成该提示词所需的上下文。它通过与模型交互来实现,模型会返回文本或一个 Claude Code 可以执行的工具调用。 3. 接着它会采取行动,例如编辑文件或运行命令。 4. 最后,它会验证这些结果,并确定它们是否达到了您最初提示词设定的目标。
如果达到了,Claude 就会完成并等待下一个提示词;如果没有达到,Claude 会返回并再次运行该循环,直到结果完整且可验证。
在整个循环过程中,您可以添加上下文、中断循环或引导模型以帮助其实现目标。
3.2 上下文窗口 (Context Window)
Claude 拥有一个上下文窗口,决定了它能存储并回顾多少你的对话记录、文件内容和命令输出等信息。一旦达到这个记忆上限,Claude Code 就会启动自动压缩机制。它会智能判断哪些内容可以移除,哪些内容可以被浓缩概括,从而将上下文的占用量重新降下来。
3.3 工具系统 (Tools)
工具是代理 (Agents) 能够发挥作用的核心骨架。目前绝大多数 AI 助手只能做到纯文本进出,而工具赋予了 Claude Code 决定何时执行物理操作的能力(例如读取文件或网络搜索)。它使用语义搜索技术,智能判断在什么时候应该调用什么工具并获取其输出。
3.4 权限模式 (Permission Modes)
Claude Code 具备多种权限模式,可通过快捷键 Shift + Tab 切换:
此外,Claude Code 拥有权限模式,默认行为是在编辑文件或运行命令前征求许可。您可以使用 Shift + Tab 切换模式。
自动编辑模式 : 自动编辑文件不再询问,但运行终端命令时依然会请求批准。
计划模式: 仅使用只读工具,在开始实际操作前,先帮你编制一份详尽的行动计划。
跳过权限确认需谨慎。如果赋予它自由运行命令的最高权限,意味着一旦出错,你很难在错误发生前将其拦截。
3.5 章节总结
总而言之,Claude Code 的运作方式是将不同的代理概念整合到了你的终端环境里:包括代理循环、管理的上下文窗口、工具系统以及可配置的权限。它能主动读取你的代码库、采取行动并验证自身成果,这让它与普通的 AI 聊天窗口产生了根本上的区别。
4 您的第一个 Claude Code 提示词
和 Claude Code 交流就像和任何其他 AI 助手交流一样自然。在输入提示词时,考虑以下几点,既能保护你的代码安全,又能让你的工作更加轻松。
4.1 文件编辑权限模式的灵活切换
你可以自由控制 Claude 的执行权限,选择最让你感到舒适的工作方式:
模式切换 (Shift + Tab): 你可以选择让 Claude 自动接受它提出的每一次文件更改,或者要求它每次修改前都必须获得你的明确批准。使用快捷键 Shift + Tab 即可在这些模式之间循环切换。
自动接受模式 (Auto Accept): 在这个模式下,Claude 会自动批准并执行对文件的编辑或创建操作,但在运行终端命令时,它依然会请求你的许可。
这些模式没有绝对的对错之分,选择你觉得最顺手的即可。
4.2 计划模式 (Plan Mode)
在 Shift + Tab 的切换菜单中,包含一个非常强大的计划模式:
核心机制: 计划模式接收你的提示词后,会使用只读工具来分析你的代码库,并针对你建议的实现方案展开研究。如果遇到不确定的地方,它还会主动向你提问以澄清需求。
输出成果: 随后,它会为你提供一份长篇的详细计划,以便后续按图索骥进行更细致的执行。
适用场景: 计划模式非常适合用于规划复杂的代码变更,或者进行安全的代码审查。在日常开发中,我们经常需要 Claude 执行多步操作来完成一个新功能,而这正是计划模式大显身手的地方。
4.3 实战演练:实现暗黑模式 (Dark Mode)
让我们实际操作一下。假设我这里有一个应用,迫切需要一个暗黑模式的切换功能: 1. 准备工作: 在项目的根目录下打开 Claude Code,连按几次 Shift + Tab 切换到计划模式。 2. 输入提示词: 我的应用需要在全局实现暗黑模式。你能在头部导航栏创建一个切换开关,让用户在亮色和暗色模式之间切换吗?我需要你基于我现有的亮色主题,寻找一个对比度良好的配色方案。 3. 规划与执行: 让 Claude 开始生成计划。审查这份计划后,如果觉得很满意,就可以让它开始执行。 4. 结果验证: 在整个过程的最后,我们可以清楚地看到 Claude 具体做了哪些操作,以及它是如何得出最终结论的。最终呈现出的暗黑模式效果会非常棒!
4.4 本章小结:编写提示词的最佳实践
- 尽可能详细: 在使用 Claude Code 时,尽量让你的提示词具有充分的描述性,把需求说清楚。 2. 掌控全局: 如果你想在开发流程的每一步都保持参与和监督,系统完全允许你这么做。 3. 谋定而后动: 充分利用计划模式,让 Claude 在实际动手执行之前,先深入钻研细节,理清你想达成的最终目标。
5 CLAUDE.md 文件
Claude Code 最实用、最强大的功能之一就是 CLAUDE.md 文件。它为 Claude Code 赋予了针对你项目的持久化记忆。
5.1 为什么需要 CLAUDE.md?
告别每次从零开始: 如果没有这个文件,每次打开 Claude Code 时,它都必须重新探索你的代码库、理解所需依赖项以及梳理已实现的功能。
减少盲目猜测: 缺乏全局认知时,它有时不得不依赖猜测,这会让我们很难将它引导到正确的开发方向上。
项目专属的入职手册: 你只需将这个 Markdown 文件添加到项目根目录,Claude 每次启动会话时都会自动读取它。简单来说,该文件里的所有内容都会自动附加到你的每一次提示词中。
一键生成: 你可以在终端运行 /init 命令,Claude 会基于当前的真实代码库为你自动生成一个基础版本。
5.2 文件内容示例
这是一个Next.js 15项目为例:
技术栈 :使用 App Router、Tailwind 和 Drizzle ORM 的 Next.js 15 项目。
常用命令: 启动开发服务器、运行测试、代码格式化 (Lint) 等命令。
代码风格: 使用双空格缩进、优先使用命名导出 (named exports) 等。
目录规范: 所有 API 路由必须放在 app/api 目录下;尽可能使用 Server Actions 代替 API 路由。
设置好之后,当你要求创建 React 组件时,它立刻就知道直接使用 Tailwind 来写样式。相比于让它自己瞎摸索,有了记忆的 Claude 能够开箱即用地精准完成任务。
5.3 文件的层级与团队共享
如果你想问:我可以把它提交到代码库吗?答案是肯定的!你可以将其纳入版本控制供整个团队使用。实际上,记忆文件具有智能的层级划分:
项目级 (Project-level): 放在项目根目录下的 CLAUDE.md ,专门记录该项目的特定规范。
用户级 (User-level): 存放在你本地系统配置文件夹中的 CLAUDE.md 。它是你个人的专属配置,会跨越所有项目生效。你可以把个人偏好(比如你习惯的注释书写风格)放在这里。
5.4 最佳实践与高效技巧
让 Claude 自动帮你记: 如果你在开发中发现自己不得不去纠正它(比如永远用 Server Actions 而不是 API 路由),请直接告诉它: 将此规则保存到记忆中 。这样下次再做类似任务,它就不会再犯错。
一键引用文档: 如果项目中有希望 Claude 重点参考的技术文档,只需使用 @ 符号加上文件路径进行挂载即可。
按需添加,保持精简(强烈建议): 我们推荐在新项目初期先不要创建 CLAUDE.md 。在实际开发中,当你发现必须频繁纠正模型时,再把这些痛点加进去。这能保证你的记忆文件短小精悍,只包含最有价值的核心信息。
5.5 本章小结
决定一次 Claude Code 开发体验是令人抓狂还是高效流畅,核心就在于上下文 (Context)。而 CLAUDE.md 正是提供这段上下文的利器。从定义你的技术栈、编码偏好和常用命令开始,在开发过程中让它陪伴你一起成长吧!
6 探索 → 计划 → 代码 → 提交工作流
如果你从 Claude Code 的教程中只能学走一件事,那就一定要记住这个工作流: 探索 (Explore) → 计划 (Plan) → 代码 (Code) → 提交 (Commit) 。大多数人容易犯的错就是跳过前两步,直接让 Claude 开始写代码,这会导致后续需要进行大量的纠偏工作。
6.1 探索与计划 (Explore & Plan)
完成这两个步骤最快的方法就是使用 计划模式 (Plan Mode) 。
无损探索: 在计划模式下,Claude 不能编辑任何文件。它只会读取文件,为如何实现目标收集信息和做研究。
如何进入: 按 Shift + Tab ,直到你在文本输入框下方看到计划模式的提示。
实战示例: 比如输入“我需要在我们的图片上传管道中加入 WebP 转换功能”。请弄清楚这段逻辑应该加在哪、是否需要新的依赖项,以及具体的实现方案。 随后,Claude 会读取相关文件、进行一些网络搜索,并给你出一份行动计划。
黄金纠偏点: 务必仔细审查这份计划,如果不满意,直接让它补充或修改。这是进行纠错和调整的最佳时机,因为此时还没有写下一行真正的代码!
6.2 编写代码 (Code)
批准执行: 一旦计划看起来完美无缺,你就可以选择批准 (Approve),让 Claude 开始逐一攻克它列出的任务项。
灵活控制权限: 此时你可以决定是让 Claude 自动接受文件修改,还是每次修改都必须询问你。
自带上下文的排障: Claude 会尽最大努力排除代码库中的故障,然后再将计划标记为完成。有时你依然需要人为引导它,但这正是先计划后执行的优势所在:Claude 拥有了得出该计划的完整上下文,这能极大地帮助它在排障时做出正确的下一步决策。
明确成功标准: 为了让 Claude 对其结果充满信心,必须让它清楚怎样才算正确。在编写计划时,务必将成功标准明确写出来。
6.3 进阶技巧:利用工具减少反复沟通
为 Claude 装备合适的工具,可以省去大量来回测试的时间:
UI 测试插件: 如果你在开发 Web 界面,一定要安装 Claude 的 Chrome 扩展程序。这样 Claude Code 就能直接控制浏览器标签页,在宣布完工前自己去测试一下 UI 界面。
测试驱动开发: 在项目中包含一个测试套件,让 Claude 可以持续验证其代码。Claude 甚至能帮你写这些测试用例!(前提是:在把它交给 Claude 之前,确保这些测试能够作为你和团队的“唯一事实来源”,以避免出现误报。)
自动记忆痛点: 如果你发现 Claude 老是卡在同一个问题上,记得让 Claude 把正确的解决方案保存到 CLAUDE.md 文件中。
6.4 审查与提交 (Commit)
当你亲自测试完毕并对结果感到满意时,就该推送代码了。
AI 代码审查: 在提交之前的一个小建议,运行一个子代理 (sub-agent)来担任代码审查员,帮你再过一遍代码。
生成 Commit 信息: 然后,你可以让 Claude 按照你个人的行文风格为你生成 Git 提交信息。
6.5 本章工作流总结
要想高效使用 Claude Code,请严格遵循这个工作流:
探索 (Explore): 为项目提供 Claude 所需的相关上下文。
计划 (Plan): 创建一份行动计划,并将其作为 Claude 判定任务是否成功的依据。
代码 (Code): 你与 Claude 之间为了敲定最终结果而进行的互动式执行过程。
提交 (Commit): 审查并推送你的代码,为下一个功能的开发做好准备。
7 上下文管理
7.1 什么是上下文窗口?
上下文 (Context) 是 Claude 的工作记忆。它读取的每一个文件、运行的每一条命令、你发送的每一条消息、以及每一次工具调用及其返回结果,都会占用上下文窗口的空间。由于上下文的容量是有限的,因此尽可能地优化它的使用空间变得极其重要。
7.2 自动与手动压缩机制 (Compaction)
自动压缩: 当你接近内存容量上限时,上下文窗口会自动进行压缩。压缩机制会概括重要的细节,移除不必要的工具调用结果,从而在上下文窗口中腾出大量空间。但请注意,这可能会导致之前的对话丢失部分细节。
手动压缩 ( /compact ): 你可以使用 /compact 命令手动执行压缩。这会压缩你到目前为止所做的所有操作,既能清理上下文空间,又能保留之前工作内容的记忆,非常实用。
彻底清空 ( /clear ): 如果你想彻底从头开始,不保留任何之前的工作记忆,可以运行 /clear 命令来清空所有内容。
7.3 监控上下文状态
你可以随时运行 /context 命令来检查当前的上下文状态。它会为你展示一个宏观概览:包括当前的上下文占用大小、哪些类别占用了最多的空间,并附带直观的图表展示。
7.4 上下文管理的黄金法则
何时使用压缩 (Compact): 当你正在开发某个特定功能,上下文即将超载但仍需继续时,请使用压缩。在继续开发时,保持与当前功能相关的上下文是非常重要的。
何时使用清空 (Clear): 如果你已经完成了一个计划,准备开始做一个新功能时,请清空上下文。你绝对不希望前一个对话的残留信息对你要创建的新内容产生干扰或“偏见”。
跨会话记忆: 对于那些你希望 Claude 在其他会话中也能记住的信息(如代码规范),请把它们写进 CLAUDE.md 文件里。这样它就不必每次都从头重新摸索。
7.5 节省上下文空间的高级技巧
提示词要具体: 具有讽刺意味的是,有时写得太短的提示词反而会在长远来看占用更多的上下文。如果你不够明确,Claude 会被迫在你的代码库中四处寻找线索并自行推演,这比你多写一两句清晰的指令要消耗多得多的上下文空间。
管理 MCP 服务器: MCP (Model Context Protocol) 服务器默认会将所有可用的工具加载到上下文中。因此,如果你加载了许多与当前项目无关的 MCP 服务器,最好将它们关闭。你也可以尝试使用技能 (Skills),它与 MCP 服务器类似,但不会把所有工具定义都塞进上下文,从而为你节省空间。
善用子代理 (Sub-agents): 子代理与你的主代理并行工作,但拥有完全独立的上下文窗口。对于那些只需要结果,不需要过程的任务(比如询问:认证接口文件放在哪里?),你可以让子代理去完成,它只会将最终的摘要返回给主代理,从而保护主代理的上下文。
7.6 本章小结
在 Claude Code 中管理上下文至关重要。使用 /compact 来精简冗长的会话,使用 /clear 来重新开始。为了高效利用上下文窗口,你的指令需要尽可能具体明确。定期检查是谁吃掉了你的上下文,并运用子代理来委派那些只需获取答案的任务。
8 Claude Code 中的 MCP
8.1 什么是 MCP?
MCP (Model Context Protocol,模型上下文协议) 是一个开源标准,它允许 Claude Code 连接到外部工具和数据源。
自动调用: 当你提出问题时,Claude 会自动判断何时应该使用这些工具来更好地理解你的请求并执行任务。
补足缺失的上下文: 上下文是使用 Claude Code 时最重要的部分之一。但在实际开发中,大量关键的上下文往往存储在别处,比如你的数据库、生产力协同软件或公共代码库中。这正是 MCP 发挥巨大作用的地方。
8.2 工具 (Tools) 如何增强 AI 代理
在讨论代理式 AI (Agentic AI) 时,理解工具的概念非常重要。
工具赋予了像 Claude Code 这样的代理执行实际操作的能力,而不仅仅像传统 AI 那样只给你返回一段文本答案。
如果你的团队使用 Linear 作为项目管理软件,你可以添加一个 Linear MCP 服务器。这样,Claude Code 就能直接拉取并读取具体 Issue 的详细信息。
如果你想获取正在使用的某个依赖库的最新文档,相关的文档 MCP 服务器就能直接将这些信息提供给 Claude Code。
你可以在官方目录(如 claude.ai/connectors )中找到数百种不同的连接器。
8.3 添加与管理 MCP 服务器
你可以使用终端命令 claude mcp add 来添加服务器。主要有两种类型:
HTTP 服务器: 适用于远程服务。这些服务由提供商托管,通过网络进行连接。
STDIO 服务器: 适用于在你的本地机器上运行的本地进程。
在 Claude Code 会话中,你可以随时运行 /mcp 命令来查看已连接的服务器及其状态,并禁用那些你不想使用的服务器。
8.4 MCP 服务器的作用域 (Scopes)
MCP 服务器可以被配置为三种不同的作用域级别:
本地 (Local): 该服务器仅在此当前项目中对你可用。
用户 (User): 该服务器将跨越你的所有项目,在你的全局环境中可用。
项目 (Project): 这种方式会生成一个 mcp.json 配置文件。当你把这个文件提交到版本控制系统(如 Git)后,团队里任何开发这个项目的人,都会自动获得完全相同的服务器配置。
8.5 警惕:MCP 对上下文的消耗
需要特别注意的是, MCP 服务器会将所有的“工具定义”塞进你的上下文窗口,即使你当前并没有在使用它们 。
定期禁用: 如果你配置了大量的服务器,它们会吃掉你大量可用的上下文空间。请多使用 /mcp 命令查看连接状态,并禁用任何你当下不活跃或不打算使用的服务器。
优先使用原生 CLI 工具: 如果某个工具有对应的命令行版本(比如用于 GitHub 的 gh 或用于 AWS 的 aws ),直接使用 CLI 工具对上下文会更友好,因为它们不会向内存中注入持久化的工具定义。
尝试使用技能(Skills): 在这种场景下,你也可以尝试使用技能。技能只会把名称和描述加载到上下文中(类似于精简版的 MCP)。当 Claude 认为它需要使用该技能时,才会决定将完整的工具(比如各种 CLI 命令行工具)加载进上下文窗口中。
自动按需搜索机制: 如果你加载的 MCP 工具占用的空间超过了总上下文窗口的 10%,Claude Code 会自动切换到工具搜索模式 (Tool Search Mode)。它会在需要时动态发现合适的工具,不过,由于工具定义不在常驻上下文中,这可能会导致调用不够精准或顺畅。
8.6 本章工作流总结
简而言之:MCP 是连接 Claude Code 与你外部工具和数据源的桥梁。
使用 claude mcp add 添加服务器。
使用 mcp.json 将它们限定在项目作用域内,以便团队自动共享。
密切关注上下文占用情况,及时禁用不活跃的服务器。
9 Claude Code 中的钩子
9.1 什么是 Hooks?
Hooks 允许你在 Claude Code 生命周期的不同阶段自动运行特定的终端命令。
核心优势:确定性 (Deterministic)。
Hooks 与我们之前讲过的所有内容(例如提示词和 CLAUDE.md )最大的区别在于,它是绝对确定、强制执行的。
为什么需要它?
你可以通过 CLAUDE.md 告诉 Claude:每次修改文件后请运行 Prettier 格式化代码。大多数情况下大模型会照做,但它毕竟不是完美的,偶尔也会遗忘。而如果你把这个操作写成一个 Hook,它就能 百分之百、没有任何例外地在每次触发时执行 。
9.2 常见的应用场景
自动格式化: 在文件编辑后自动修正代码格式。
合规性日志: 记录所有被执行过的命令,以备后续审计。
拦截危险操作: 阻止修改生产环境配置文件等高危行为。
任务完成提醒: 当 Claude 完成一项漫长的任务时,自动给自己发送一条通知。
9.3 配置与生命周期事件
Hooks 是在你的 settings.json 文件中进行配置的。你可以选择一个生命周期事件,(可选)设置一个匹配器 (Matcher)来指定它适用于哪些工具,并提供需要运行的命令。
Claude Code 提供的生命周期事件包括:
user_prompt_submit : 在你提交提示词之后、Claude 开始处理之前运行。
pre_tool_use : 在 Claude 准备调用某个工具 之前 运行。
post_tool_use : 在工具调用 完成之后 运行。
notification : 当 Claude 发送系统通知时运行。
stop : 当 Claude 完成所有工作并停止响应时运行。
9.4 实战 1:自动代码格式化 (Post-tool use)
这是最常见的一种用法。
配置方式: 设置一个 post_tool_use (工具调用后)的钩子,并将匹配器设为 edit (单文件编辑)或 multi-edit (多文件编辑)。
触发机制: 这样一来,只要 Claude 修改了文件,这个钩子就会触发。你配置的命令会自动检查文件扩展名,并运行对应的格式化程序。比如 TypeScript 用 Prettier,Go 语言用 gofmt ,Python 用 ruff ,完全取决于你的项目规范。
9.5 实战 2:拦截高危操作 (Pre-tool use)
pre_tool_use (工具调用前)钩子能在危险操作发生前将其拦截。
数据传递: 钩子会通过标准输入 (stdin) 接收到 JSON 格式的工具名称和输入参数。
通行与拦截逻辑:
如果你的脚本以退出码 0 (Exit code 0) 结束,代表 允许放行 。
如果以退出码 2 (Exit code 2) 结束,代表 拦截操作 。并且,你的标准错误 (stderr) 信息会被直接反馈给 Claude。这样 Claude 就会明白操作为什么被拒绝,并调整策略。
强制底线: 这是强制执行团队底线规则的利器。例如:禁止向生产配置目录写入、拦截任何包含 rm -rf 的 Bash 命令、或者禁止直接向 main 分支提交代码。
9.6 团队共享与环境变量
配置入库: 配置在项目级 settings.json (通常在项目特定的配置目录下)中的 Hooks 可以被提交到你的代码仓库中。这意味着你的整个团队将自动获得完全相同的代码护栏和工作流。
绝对路径: 在命令中,建议使用 CLAUDE_PROJECT_DIR 环境变量来定位你在项目中存储的脚本。这样无论 Claude 当前处于哪个工作目录,都能准确触发相应的 Hook 脚本。
9.7 本章小结
Hooks 赋予了你对 Claude Code 行为的绝对、确定性控制。
使用 post_tool_use 进行自动格式化和记录日志。
使用 pre_tool_use 拦截危险操作。
通过 /hooks 命令或直接编辑 settings.json 来配置它们,并提交到仓库供团队共享。
黄金法则: 如果某件事必须每次都万无一失地发生, 不要写在提示词里,把它写进 Hook 里。
学废了或有启发,别忘了顺手给我点个赞、在看、转发,三连~因为你的反馈真的很重要!如果想第一时间收到推送,也可以给我个星标⭐